package Thread;

import java.util.Random;

/**
 给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数.
 实现代码, 能够创建两个线程, 对这个数组的所有元素求和.
 其中线程1 计算偶数下标元素的和, 线程2 计算奇数下标元素的和.
 最终再汇总两个和, 进行相加
 记录程序的执行时间.
 */

class Counter{
    int evenSum;
    int oddsum;
}

public class Thread_sum {
    public static void main(String[] args) throws InterruptedException {
        int[] num=new int[1000_0000];
        Random random=new Random();
        Counter counter=new Counter();
        for (int i = 0; i < num.length ; i++) {
            num[i]= random.nextInt(100)+1;
        }
       Long start=System.nanoTime();
        //子线程计算下标为偶数的和
        Thread t1=new Thread(()->{
            int evensum=0;
            for (int i = 0; i <num.length; i=i+2) {
              evensum+=num[i];
            }
            counter.evenSum=evensum;
        },"子线程");
        t1.start();
        //主线程计算下标为奇数的和
        for (int i = 1; i < num.length ; i=i+2) {
            counter.oddsum+=num[i];
        }
        //需要等待子线程执行完毕才可以继续
        t1.join();
        //此时t1的子线程全部执行完毕
        System.out.println("总和为:"+(counter.evenSum+ counter.oddsum));
        Long end=System.nanoTime();
        System.out.println("总耗时为:"+((end-start)*1.0/1000/1000)+"ms");
    }
}
